{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\Users\\11985\\anaconda3\\envs\\scoliosis\\lib\\site-packages\\statsmodels\\tsa\\base\\tsa_model.py:7: FutureWarning: pandas.Int64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n",
      "  from pandas import (to_datetime, Int64Index, DatetimeIndex, Period,\n",
      "c:\\Users\\11985\\anaconda3\\envs\\scoliosis\\lib\\site-packages\\statsmodels\\tsa\\base\\tsa_model.py:7: FutureWarning: pandas.Float64Index is deprecated and will be removed from pandas in a future version. Use pandas.Index with the appropriate dtype instead.\n",
      "  from pandas import (to_datetime, Int64Index, DatetimeIndex, Period,\n"
     ]
    }
   ],
   "source": [
    "import sklearn.preprocessing\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "from torch.utils.data import Dataset\n",
    "import os\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from tsfresh import extract_features\n",
    "from sklearn.model_selection import train_test_split\n",
    "from scipy import signal\n",
    "from tsfresh.utilities.dataframe_functions import impute\n",
    "from tsfresh.feature_extraction import ComprehensiveFCParameters\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "PATH='data'"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Feature Extraction: 100%|██████████| 39/39 [00:21<00:00,  1.83it/s]\n",
      "c:\\Users\\11985\\anaconda3\\envs\\scoliosis\\lib\\site-packages\\sklearn\\preprocessing\\_data.py:240: UserWarning: Numerical issues were encountered when centering the data and might not be solved. Dataset may contain too large values. You may need to prescale your features.\n",
      "  warnings.warn(\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['4' '1' '0' '1' '4' '0' '4' '0' '4' '0' '0' '4' '4' '2' '4' '0' '0' '4'\n",
      " '4' '4' '0' '0' '4' '4' '4' '0' '4' '4' '4' '0' '0' '4' '4' '4' '4' '3'\n",
      " '0' '0' '3' '4' '4' '0' '0' '0' '4' '2']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Feature Extraction: 100%|██████████| 39/39 [00:21<00:00,  1.82it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['4' '4' '0' '4' '0' '0' '0' '4' '4' '4' '0' '4' '4' '0' '0' '4' '0' '4'\n",
      " '4' '4' '0' '4' '1' '1' '4' '1' '4' '3' '4' '0' '4' '4' '4' '1' '4' '0'\n",
      " '0' '1' '0' '2' '4' '0' '3' '4' '4' '4']\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\Users\\11985\\anaconda3\\envs\\scoliosis\\lib\\site-packages\\sklearn\\preprocessing\\_data.py:240: UserWarning: Numerical issues were encountered when centering the data and might not be solved. Dataset may contain too large values. You may need to prescale your features.\n",
      "  warnings.warn(\n"
     ]
    }
   ],
   "source": [
    "class SensorData(Dataset):\n",
    "    def __init__(self, train, path=PATH):\n",
    "        self.train = train\n",
    "        data = []\n",
    "        for filepath, dirnames, filenames in os.walk(path):\n",
    "            for file in filenames:\n",
    "                data_path = os.path.join(filepath,file)\n",
    "                df = pd.read_excel(data_path, names=['time','channel1','channel2','channel3','channel4','channel5','channel6'], header=0)\n",
    "                if np.sum(np.sum(df=='--')) != 0 :\n",
    "                    continue\n",
    "                for channel in ['channel1','channel2','channel3','channel4','channel5','channel6']:\n",
    "                    b, a  =   signal.butter( 8 , [ 0.2 , 0.8 ],  'bandstop' )\n",
    "                    df[channel] = signal.filtfilt(b, a, df[channel])\n",
    "                df.insert(loc=1, column='id',value=len(data))\n",
    "                data.append(df)\n",
    "        df = data[0]\n",
    "        for i , dataframe in enumerate(data[1:]):\n",
    "            df = pd.concat([df, dataframe])\n",
    "        df = df.fillna(500)\n",
    "        extraction_settings = ComprehensiveFCParameters()\n",
    "        X = extract_features(df, column_id='id', column_sort='time', default_fc_parameters=extraction_settings, impute_function=impute)\n",
    "        # 标准化\n",
    "        X = sklearn.preprocessing.scale(X)\n",
    "        # print(X.shape)\n",
    "        y = pd.Series(['4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '4', '1',\n",
    "                       '1', '1', '4', '4', '4', '4', '4', '4', '4', '2', '2', '4', '4', '4', '4', '4', '4',\n",
    "                       '4', '3', '3', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'])\n",
    "        \n",
    "        # y.index = X.index\n",
    "        X_full_train, X_full_test, y_train, y_test = train_test_split(X, y, test_size=.2)\n",
    "        print(y_train.values)\n",
    "        if train:\n",
    "            self.signals = torch.from_numpy(X_full_train)\n",
    "            self.labels = torch.from_numpy(y_train.values.astype(np.int16))\n",
    "        else:\n",
    "            self.signals = torch.from_numpy(X_full_test)\n",
    "            self.labels = torch.from_numpy(y_test.values.astype(np.int16))\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.labels)\n",
    "\n",
    "    def __getitem__(self, item):\n",
    "        signal = self.signals[item]\n",
    "        label = self.labels[item]\n",
    "        return signal, label\n",
    "\n",
    "class DataLoader(object):\n",
    "    def __init__(self, batch_size=1, is_train=True):\n",
    "        self.batch_size = batch_size\n",
    "        self.istrain = is_train\n",
    "\n",
    "        if is_train:\n",
    "            self.data = SensorData(train=True)\n",
    "        else:\n",
    "            self.data = SensorData(train=False)\n",
    "\n",
    "    def get_data(self):\n",
    "        if self.istrain:\n",
    "            dataloader = torch.utils.data.DataLoader(self.data, batch_size=self.batch_size, shuffle=True)\n",
    "        else:\n",
    "            dataloader = torch.utils.data.DataLoader(self.data, batch_size=1, shuffle=False)\n",
    "        return dataloader\n",
    "\n",
    "train_loader = DataLoader(batch_size=1, is_train=True)\n",
    "train_data = train_loader.get_data()\n",
    "test_loader = DataLoader(is_train=False)\n",
    "test_data = test_loader.get_data()\n",
    "print(test_loader.data.labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "class LinearNet(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(LinearNet, self).__init__()\n",
    "\n",
    "        self.fc1 = nn.Linear(4722,2000)\n",
    "        self.re1 = nn.ReLU()\n",
    "        self.fc2 = nn.Linear(2000,1000)\n",
    "        self.re2 = nn.ReLU()\n",
    "        self.fc3 = nn.Linear(1000,100)\n",
    "        self.re3 = nn.ReLU()\n",
    "        self.fc4 = nn.Linear(100,5)\n",
    "\n",
    "    def forward(self, input):\n",
    "        x = self.fc1(input)\n",
    "        x = self.re1(x)\n",
    "        x = self.fc2(x)\n",
    "        x = self.re2(x)\n",
    "        x = self.fc3(x)\n",
    "        x = self.re3(x)\n",
    "        x = self.fc4(x)\n",
    "        \n",
    "\n",
    "        return x\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training ...\n",
      "Epoch: 0 \n",
      "Train : [45/46 (98%)]\tTrain_loss: 0.000177 \tAccuracy:36/46(78)\n",
      "Test : Average loss: 0.2924\tAccuracy: 11/12 (92%)\n",
      "\n",
      "Epoch: 1 \n",
      "Train : [45/46 (98%)]\tTrain_loss: 0.000000 \tAccuracy:38/46(83)\n",
      "Test : Average loss: 0.3730\tAccuracy: 11/12 (92%)\n",
      "\n",
      "Epoch: 2 \n",
      "Train : [45/46 (98%)]\tTrain_loss: 0.986033 \tAccuracy:39/46(85)\n",
      "Test : Average loss: 0.1943\tAccuracy: 11/12 (92%)\n",
      "\n",
      "Epoch: 3 \n",
      "Train : [45/46 (98%)]\tTrain_loss: 0.000000 \tAccuracy:41/46(89)\n",
      "Test : Average loss: 0.2221\tAccuracy: 11/12 (92%)\n",
      "\n",
      "Epoch: 4 \n",
      "Train : [45/46 (98%)]\tTrain_loss: 0.001404 \tAccuracy:41/46(89)\n",
      "Test : Average loss: 0.0559\tAccuracy: 12/12 (100%)\n",
      "\n",
      "Epoch: 5 \n",
      "Train : [45/46 (98%)]\tTrain_loss: 0.000000 \tAccuracy:45/46(98)\n",
      "Test : Average loss: 0.0041\tAccuracy: 12/12 (100%)\n",
      "\n",
      "Epoch: 6 \n",
      "Train : [45/46 (98%)]\tTrain_loss: 0.000000 \tAccuracy:45/46(98)\n",
      "Test : Average loss: 0.0003\tAccuracy: 12/12 (100%)\n",
      "\n",
      "Epoch: 7 \n",
      "Train : [45/46 (98%)]\tTrain_loss: 0.000363 \tAccuracy:45/46(98)\n",
      "Test : Average loss: 0.0017\tAccuracy: 12/12 (100%)\n",
      "\n",
      "Epoch: 8 \n",
      "Train : [45/46 (98%)]\tTrain_loss: 0.000000 \tAccuracy:45/46(98)\n",
      "Test : Average loss: 0.0005\tAccuracy: 12/12 (100%)\n",
      "\n",
      "Epoch: 9 \n",
      "Train : [45/46 (98%)]\tTrain_loss: 0.000000 \tAccuracy:46/46(100)\n",
      "Test : Average loss: 0.0000\tAccuracy: 12/12 (100%)\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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6sF+vHLlSgFAHDx4sMy39eDrKTk5WQAQU6ZMKfNtTZo0Sbi6uors7GzpWHp6uggODhYARHR0tBAi7zHTarXihRdeKPa2LO3PxeH7a+W9v9rcSE9R2rVrh+rVq+PVV1/FtGnT4ODggFWrVuHUqVNyNw0TJ07E8uXL0adPH7z33nsICQnB5s2bsXDhQowdOxaPPvooAODll1+GXq/H448/joCAAMTHx2P27Nnw8PDAY489BgBo3bo1nnzySTRu3BjVq1fH+fPnsWLFCmnZYUm0Wi2GDx+OuXPnwt3dHf3794eHh4f096SkJHTp0gXDhg1DvXr14ObmhiNHjmDr1q3o37+/dN57772H9957D7/99ps0IvH555+jffv26NChA8aOHYtatWohJSUFly9fxqZNmwoVNUtISEC/fv3w8ssvIykpCdOmTYOTkxMiIyMBAHZ2dpgzZw6ee+45PPnkkxgzZgyysrLw8ccf4969e/jwww+l25o7dy7at2+P1q1bY+rUqahbty5u3ryJjRs34r///a/Zt87SLF68GDt37kSfPn0QHByMzMxMacl3t27dLL6d8lBKH+7evTscHR0xdOhQTJkyBZmZmVi0aBHu3r1rdp6rqys+/fRTjB49Gt26dcPLL78MPz8/XL58GadOncKCBQsA5C1/79u3L9q0aYOJEyciODgY165dw7Zt27Bq1apS2zNy5EiMGTMGN27cQLt27RAWFmb2d0teE8uXL8fIkSOxZMkSDB8+HEBeP46KikK7du0wfvx4hIWFITMzE1euXMGWLVuwePFis2F9rVaL7t27Y9KkSTAajfjoo4+QnJwsFdYDgNmzZ6N79+7o0qUL3nzzTTg6OmLhwoU4c+YMVq9eLY3wvffee/j111/RsWNHvP3222jUqBHu3buHrVu3YtKkSahXr57Fz9cvv/yChQsX4plnnkHt2rUhhMD69etx7949dO/e3eLbKYtnn30Wq1atQu/evfHvf/8brVq1goODA65fv45du3bh6aefRr9+/Sx6Pbm5uSEkJAQ///wzunbtCk9PT3h7e6NWrVqltqNPnz6YO3cuhg0bhldeeQW3b9/GJ598Ik2rmNSqVQtvv/02Zs6ciYyMDAwdOhQeHh44d+4cEhMTMWPGDIv7c3H4/lo6q72/WhweqUxZviULIcT+/ftF27ZthbOzs/Dx8RGjR48W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",
      "text/plain": [
       "<Figure size 640x480 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "linear_model = LinearNet()\n",
    "EPOCH=10\n",
    "optimizer = torch.optim.Adam(linear_model.parameters(), lr=0.001, weight_decay=0.0001)\n",
    "torch.optim.lr_scheduler.StepLR(optimizer, 20, gamma=0.9, last_epoch=-1) \n",
    "loss = torch.nn.CrossEntropyLoss()\n",
    "\n",
    "train_mean_loss_list = []\n",
    "train_acc_list = []\n",
    "test_acc_list = []\n",
    "\n",
    "\n",
    "print('training ...')\n",
    "bina_lst = []\n",
    "for epoch in range(EPOCH):\n",
    "    train_loss_sum = 0\n",
    "    train_acc_sum = 0\n",
    "    linear_model.train() \n",
    "    for batch_idx, (signals, labels) in enumerate(train_data):\n",
    "        signals = signals.type(torch.FloatTensor)\n",
    "        # labels = labels.view([-1,1])\n",
    "        labels = labels.type(torch.LongTensor)\n",
    "        optimizer.zero_grad()\n",
    "        output = linear_model(signals)\n",
    "        train_loss = loss(output, labels)\n",
    "        # train_loss.requires_grad_(True)\n",
    "        train_loss.backward()\n",
    "        optimizer.step()\n",
    "        train_loss_sum += train_loss.item()\n",
    "        train_acc_sum += (output.argmax(dim=1) == labels).sum().item()\n",
    "        # if(batch_idx+1)%30 == 0: \n",
    "    print('Epoch: {} \\nTrain : [{}/{} ({:.0f}%)]\\tTrain_loss: {:.6f} \\tAccuracy:{}/{}({:.0f})'.format(\n",
    "        epoch, batch_idx * len(signals), len(train_data),\n",
    "        100. * batch_idx / len(train_data), train_loss.item(),\n",
    "        train_acc_sum, len(train_data), 100. * train_acc_sum / len(train_data)))\n",
    "    \n",
    "    train_mean_loss_list.append(train_loss_sum/batch_idx)\n",
    "    train_acc_list.append(100. * train_acc_sum/len(train_data))\n",
    "\n",
    "    linear_model.eval()\n",
    "    test_loss = 0\n",
    "    correct = 0\n",
    "    with torch.no_grad():\n",
    "        for batch_idx, (signals, labels) in enumerate(test_data):\n",
    "            signals = signals.type(torch.FloatTensor)\n",
    "            # labels = labels.view([-1,1])\n",
    "            labels = labels.type(torch.LongTensor)\n",
    "            output = linear_model(signals)\n",
    "            test_loss += loss(output, labels).item()\n",
    "            pred = output.max(1, keepdim=True)[1]\n",
    "            correct += pred.eq(labels.view_as(pred)).sum().item()\n",
    "    test_loss /= len(test_data)\n",
    "    print('Test : Average loss: {:.4f}\\tAccuracy: {}/{} ({:.0f}%)\\n'.format(\n",
    "            test_loss, correct, len(test_data),\n",
    "            100. * correct / len(test_data)))\n",
    "\n",
    "    test_acc_list.append(100. * correct/len(test_data))\n",
    "\n",
    "x1 = range(0, EPOCH)\n",
    "x2 = range(0, EPOCH)\n",
    "x3 = range(0, EPOCH)\n",
    "plt.subplot(1, 3, 1) #一行三列的第一列\n",
    "plt.plot(x1, train_mean_loss_list, 'o-')\n",
    "plt.title('Train_loss vs.epochs')\n",
    "plt.ylabel('Train loss')\n",
    "plt.subplot(1, 3, 2)\n",
    "plt.plot(x2, train_acc_list, '.-')\n",
    "plt.title('Train_acc vs.epochs')\n",
    "plt.ylabel('Train acc')\n",
    "plt.subplot(1, 3, 3)\n",
    "plt.plot(x3, test_acc_list, '.-')\n",
    "plt.title('Test_acc vs.epochs')\n",
    "plt.ylabel('Test acc')\n",
    "# plt.savefig(\"show.jpg\")#这一句话一定要放在plt.show()前面\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "class CNN(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(CNN, self).__init__()\n",
    "\n",
    "        self.conv1 = nn.Sequential(\n",
    "            nn.Conv1d(\n",
    "                in_channels=1,\n",
    "                out_channels=100,\n",
    "                kernel_size=10,\n",
    "                stride=1\n",
    "            ),\n",
    "            nn.ReLU(),\n",
    "        )\n",
    "        self.conv2 = nn.Sequential(\n",
    "            nn.Conv1d(100, 10, 10),\n",
    "            nn.ReLU(),\n",
    "        )\n",
    "        self.conv3 = nn.Sequential(\n",
    "            nn.Conv1d(10,1,10),\n",
    "            nn.ReLU(),\n",
    "        )\n",
    "        self.fc = nn.Sequential(\n",
    "            nn.Linear(4695,5),\n",
    "            nn.Sigmoid(),\n",
    "        )\n",
    "\n",
    "    def forward(self, input):\n",
    "        x = self.conv1(input)\n",
    "        x = self.conv2(x)\n",
    "        x = self.conv3(x)\n",
    "        x = self.fc(x)\n",
    "\n",
    "        return x\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "training ...\n",
      "Epoch: 0 \n",
      "Train : [29/46 (63%)]\tTrain_loss: 1.606164 \tAccuracy:8/46(17)\n",
      "Test : Average loss: 1.6029\tAccuracy: 6/12 (50%)\n",
      "\n",
      "Epoch: 1 \n",
      "Train : [29/46 (63%)]\tTrain_loss: 1.596442 \tAccuracy:15/46(33)\n",
      "Test : Average loss: 1.5972\tAccuracy: 6/12 (50%)\n",
      "\n",
      "Epoch: 2 \n",
      "Train : [29/46 (63%)]\tTrain_loss: 1.588374 \tAccuracy:15/46(33)\n",
      "Test : Average loss: 1.5908\tAccuracy: 6/12 (50%)\n",
      "\n",
      "Epoch: 3 \n",
      "Train : [29/46 (63%)]\tTrain_loss: 1.588296 \tAccuracy:15/46(33)\n",
      "Test : Average loss: 1.5850\tAccuracy: 6/12 (50%)\n",
      "\n",
      "Epoch: 4 \n",
      "Train : [29/46 (63%)]\tTrain_loss: 1.572703 \tAccuracy:14/46(30)\n",
      "Test : Average loss: 1.5791\tAccuracy: 6/12 (50%)\n",
      "\n",
      "Epoch: 5 \n",
      "Train : [29/46 (63%)]\tTrain_loss: 1.564866 \tAccuracy:16/46(35)\n",
      "Test : Average loss: 1.5732\tAccuracy: 6/12 (50%)\n",
      "\n",
      "Epoch: 6 \n",
      "Train : [29/46 (63%)]\tTrain_loss: 1.570821 \tAccuracy:15/46(33)\n",
      "Test : Average loss: 1.5675\tAccuracy: 6/12 (50%)\n",
      "\n",
      "Epoch: 7 \n",
      "Train : [29/46 (63%)]\tTrain_loss: 1.549664 \tAccuracy:16/46(35)\n",
      "Test : Average loss: 1.5617\tAccuracy: 6/12 (50%)\n",
      "\n",
      "Epoch: 8 \n",
      "Train : [29/46 (63%)]\tTrain_loss: 1.560463 \tAccuracy:16/46(35)\n",
      "Test : Average loss: 1.5562\tAccuracy: 6/12 (50%)\n",
      "\n",
      "Epoch: 9 \n",
      "Train : [29/46 (63%)]\tTrain_loss: 1.555051 \tAccuracy:16/46(35)\n",
      "Test : Average loss: 1.5506\tAccuracy: 6/12 (50%)\n",
      "\n"
     ]
    },
    {
     "data": {
      "image/png": "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LUVERFQ5TIyInoGxkYTOPvZyh0FERNWEXWlERERERZgYERERERVhYkRERERUhIkRERERUREmRkRERERFmBgRERERFWFiRERERFSEiRERERFRESZGREREREU483UJhCi8LWh6errMkZAuU58/6vOpNvDcperAc5d0VXWcu0yMSvDw4UMAgLu7u8yRkD54+PAhlEplrT0XwHOXqgfPXdJVz3LuSqI2fxLoiIKCAty6dQs2NjaQJO0bgqanp8Pd3R0JCQmwtbWVKcK6j+9T4S+Whw8fwsXFBUZGtdNrzXP32fF94rmrq/g+Vc+5yxajEhgZGcHNza3MbWxtbQ32xKsMQ3+fauvXthrP3epj6O8Tz13dZejv07Oeuyy+JiIiIirCxIiIiIioCBOjSlIoFJg3bx4UCoXcodRpfJ/qHv6bVAzfp7qH/yYVw/eperD4moiIiKgIW4yIiIiIijAxIiIiIirCxIiIiIioCBMjIiIioiJMjIiIiIiKMDGqhJUrV8Lb2xvm5uZo164d/vjjD7lDqlPmz58PSZK0Hk5OTnKHReC5Wx6eu3UXz92y8dytfkyMKmjbtm2YOnUq5s6dizNnzqBbt24YMGAAbty4IXdodUrz5s2RlJSkeZw7d07ukAwez92K4blb9/DcrRieu9WLiVEFLV26FG+//TbeeecdNGvWDMuWLYO7uztWrVold2h1iomJCZycnDQPBwcHuUMyeDx3K4bnbt3Dc7dieO5WLyZGFZCbm4tTp06hb9++Wsv79u2Lo0ePyhRV3XTlyhW4uLjA29sbw4cPR1xcnNwhGTSeuxXHc7du4blbcTx3qxcTowq4e/cu8vPz0bBhQ63lDRs2RHJyskxR1T0BAQHYtGkTfv/9d6xduxbJycno0qUL7t27J3doBovnbsXw3K17eO5WDM/d6mcidwC6RJIkrb+FEMWWGbIBAwZo/r9Fixbo3LkzfHx8sHHjRkyfPl3GyIjnbtl47tZdPHfLxnO3+rHFqAIaNGgAY2PjYr9SUlJSiv2aocesrKzQokULXLlyRe5QDBbP3arhuSs/nrtVw3P32TExqgAzMzO0a9cOYWFhWsvDwsLQpUsXmaKq+1QqFS5evAhnZ2e5QzFYPHerhueu/HjuVg3P3WogqEJCQkKEqampWLdunYiJiRFTp04VVlZW4tq1a3KHVmd8+OGHIjw8XMTFxYnIyEjx0ksvCRsbG75HMuO5Wz6eu3UTz93y8dytfqwxqqA33ngD9+7dw2effYakpCT4+/vj119/haenp9yh1RmJiYkYMWIE7t69CwcHB3Tq1AmRkZF8j2TGc7d8PHfrJp675eO5W/0kIYSQOwgiIiKiuoA1RkRERERFmBgRERERFWFiRERERFSEiRERERFRESZGREREREWYGBEREREVYWJEREREVISJEREREVERJkZERERERZgYERERERVhYkRERERU5P8BgWZl1WG41c0AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 3 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "conv_model = CNN()\n",
    "EPOCH=10\n",
    "optimizer = torch.optim.Adam(conv_model.parameters(), lr=0.001, weight_decay=0.0001)\n",
    "torch.optim.lr_scheduler.StepLR(optimizer, 20, gamma=0.9, last_epoch=-1) \n",
    "loss = torch.nn.CrossEntropyLoss()\n",
    "\n",
    "train_mean_loss_list = []\n",
    "train_acc_list = []\n",
    "test_acc_list = []\n",
    "\n",
    "\n",
    "print('training ...')\n",
    "bina_lst = []\n",
    "for epoch in range(EPOCH):\n",
    "    train_loss_sum = 0\n",
    "    train_acc_sum = 0\n",
    "    conv_model.train() \n",
    "    for batch_idx, (signals, labels) in enumerate(train_data):\n",
    "        signals = signals.type(torch.FloatTensor)\n",
    "        # labels = labels.view([-1,1])\n",
    "        labels = labels.type(torch.LongTensor)\n",
    "        optimizer.zero_grad()\n",
    "        output = conv_model(signals)\n",
    "        train_loss = loss(output, labels)\n",
    "        # train_loss.requires_grad_(True)\n",
    "        train_loss.backward()\n",
    "        optimizer.step()\n",
    "        train_loss_sum += train_loss.item()\n",
    "        train_acc_sum += (output.argmax(dim=1) == labels).sum().item()\n",
    "        if(batch_idx+1)%30 == 0: \n",
    "            print('Epoch: {} \\nTrain : [{}/{} ({:.0f}%)]\\tTrain_loss: {:.6f} \\tAccuracy:{}/{}({:.0f})'.format(\n",
    "                epoch, batch_idx * len(signals), len(train_data),\n",
    "                100. * batch_idx / len(train_data), train_loss.item(),\n",
    "                train_acc_sum, len(train_data), 100. * train_acc_sum / len(train_data)))\n",
    "    \n",
    "    train_mean_loss_list.append(train_loss_sum/batch_idx)\n",
    "    train_acc_list.append(100. * train_acc_sum/len(train_data))\n",
    "\n",
    "    conv_model.eval()\n",
    "    test_loss = 0\n",
    "    correct = 0\n",
    "    with torch.no_grad():\n",
    "        for batch_idx, (signals, labels) in enumerate(test_data):\n",
    "            signals = signals.type(torch.FloatTensor)\n",
    "            # labels = labels.view([-1,1])\n",
    "            labels = labels.type(torch.LongTensor)\n",
    "            output = conv_model(signals)\n",
    "            test_loss += loss(output, labels).item()\n",
    "            pred = output.max(1, keepdim=True)[1]\n",
    "            correct += pred.eq(labels.view_as(pred)).sum().item()\n",
    "    test_loss /= len(test_data)\n",
    "    print('Test : Average loss: {:.4f}\\tAccuracy: {}/{} ({:.0f}%)\\n'.format(\n",
    "            test_loss, correct, len(test_data),\n",
    "            100. * correct / len(test_data)))\n",
    "\n",
    "    test_acc_list.append(100. * correct/len(test_data))\n",
    "\n",
    "\n",
    "    \n",
    "\n",
    "x1 = range(0, EPOCH)\n",
    "x2 = range(0, EPOCH)\n",
    "x3 = range(0, EPOCH)\n",
    "plt.subplot(1, 3, 1) #一行三列的第一列\n",
    "plt.plot(x1, train_mean_loss_list, 'o-')\n",
    "plt.title('Train_loss vs.epochs')\n",
    "plt.ylabel('Train loss')\n",
    "plt.subplot(1, 3, 2)\n",
    "plt.plot(x2, train_acc_list, '.-')\n",
    "plt.title('Train_acc vs.epochs')\n",
    "plt.ylabel('Train acc')\n",
    "plt.subplot(1, 3, 3)\n",
    "plt.plot(x3, test_acc_list, '.-')\n",
    "plt.title('Test_acc vs.epochs')\n",
    "plt.ylabel('Test acc')\n",
    "# plt.savefig(\"show.jpg\")#这一句话一定要放在plt.show()前面\n",
    "plt.show()\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "from torch.nn.utils.rnn import pad_sequence\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "scoliosis",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.16"
  },
  "vscode": {
   "interpreter": {
    "hash": "53731c0bd8317f76adc139ab2951f8100529dd017061989e9c58a97ec3f8a37d"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
